package cn.hkctp.mybatis.first;

import cn.hkctp.mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisFirst {

    private SqlSessionFactory sqlSessionFactory;

    //创建工厂
    @Before
    public void init() throws IOException {
        //创建会话工厂
        //配置文件（SqlMapConfig.xml）
        String resource = "SqlMapConfig.xml";

        //加载配置文件到输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建会话工厂
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    //测试根据id查询用户（得到单条记录）
    @Test
    public void testFindUserById(){
        //通过sqlSessionFactory创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过sqlSession操作数据库
        // 第一个参数：statement的位置，等同于namespace+statement的id
        // 第二个参数：传入的参数
        User user = null;
        try{
            user = sqlSession.selectOne("test.findUserById",1);
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            //关闭sqlSession
            sqlSession.close();
        }
        System.out.println(user);
    }

    //测试根据name查询用户信息（得到多条记录）
    @Test
    public void testFindUserByName(){
        //通过sqlSessionFactory创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过sqlSession操作数据库
        // 第一个参数：statement的位置，等同于namespace+statement的id
        // 第二个参数：传入的参数
//        User user = null;
        List<User> list = null;
        try{
            list = sqlSession.selectList("test.findUserByName","小明");
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            //关闭sqlSession
            sqlSession.close();
        }
        System.out.println(list.get(0).getUsername());
    }

    //测试根据name查询用户信息（得到多条记录）
    @Test
    public void testInsertUser(){
        //通过sqlSessionFactory创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过sqlSession操作数据库
        //创建插入数据对象
        User user = new User();
        user.setUsername("浪子燕青2");
        user.setAddress("广东深圳");
        user.setBirthday(new Date());
        user.setSex("1");

        try{
            sqlSession.insert("test.insertUser",user);
            //需要提交事务
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            //关闭sqlSession
            sqlSession.close();
        }

        System.out.println(user.getId());
    }


    //测试根据id删除用户
    @Test
    public void testDeleteUser(){
        //通过sqlSessionFactory创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //通过sqlSession操作数据库
        sqlSession.delete("test.deleteUser",28);
        sqlSession.commit();

        sqlSession.close();
    }

    //测试根据id更新用户
    @Test
    public void testUpdateUser(){
        //通过sqlSessionFactory创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过sqlSession操作数据库
        //创建插入数据对象
        User user = new User();
        user.setId(27);
        user.setUsername("王子2323");
        user.setAddress("四川成都222");
        user.setBirthday(new Date());
        user.setSex("0");

        try{
            sqlSession.insert("test.updateUser",user);
            //需要提交事务
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            //关闭sqlSession
            sqlSession.close();
        }

        System.out.println(user.getId());
    }
}
